Fáza 3 - strojové učenie

Autori: Matej Delinčák (50%), Martin Pirkovský (50%)

1. Manuálne vytvorenie a vyhodnotenie rozhodovacích pravidiel pre klasifikáciu (5b)

ALGORITMUS 1R

Algoritmus zahrnujuci 1 pravidlo (čiže jeden stĺpec). Vybrali sme si hbver, pretože v predošlom zadadní nám vyšiel ako najlepší atribút. A budeme mať pravidlo, že ak hbver je väčší ako 0.5 tak pacient bude pravdepodobne zdravý. Ak sa pozrieme na boxplot, môžeme túto hodnotu tam približne aj vidieť.

$Accuracy = \frac{TP+TN}{TP+FP+FN+TN}$

$Precision = \frac{TP}{TP+FP}$

$Recall = \frac{TP}{TP+FN}$

Ako môžeme vidieť náš 1R algoritmus nerobí nejaké divy ale dosiahli sme accuracy 70 percent, čo je podľa nás celkom slušné na to, že využívame iba jeden algoritmus. Dokonca v testovacej vzorke sme dosiahli aj lepšie hodnoty accuracy, precision a recall.

ALGORITMUS 2R

Algoritmus zahrnujuci 2 pravidlá (čiže dva stĺpce). Vybrali sme si hbver a leukocyty, pretože v predošlom zadadní nám vyšli ako najlepšie. A budeme mať pravidlo, že ak hbver je väčší ako 0.5 a leukocyty viac ako 0.25, tak pacient bude pravdepodobne zdravý. Tieto hodnoty sme vyčítali z grafu nižšie zo scatterplotu.

Ako vidíme náš algoritmus, ktorý používa už dva parametre dosahuje lepšie výsledky. ide už okolo 80 percent accuracy. Takisto ako pri 1R vidíme, že testovacia čast dopadla opäť lepšie v každej metrike.

2. Natrénovanie a vyhodnotenie klasifikátora strojového učenia (5b)

Z celeho datasetu sme vybrali len tie stĺpce, ktoré nám anova dala ako najlepšie predošlého zadania. A to sú hbver, leukocyty, blood_group, smoker, atd..

Vidíme, že sme dosiahli celkom dobré výsledky aj na trénovacej a testovacej. Nemáme ani veľký overfitting.

Strom sme tu aj vizualizovali, ale je príliš veľký. Preto prikladáme do odovzdania aj png súbor, ktorý sa dá približiť a teda bude všetko vidno.

Porovnanie natrénovaných klasifikátorov

Metriky z našeho vytvoreného algoritmu 1R

Metriky z našeho vytvoreného algoritmu 2R

Metriky z našeho rozhodovacieho stromu

Ako môžeme vidieť náš prvý algoritmus nedosiahol dobrú presnosť. Tak sme sa rozhodli v algoritme 2R použiť dva atribúty, ktoré nám ANOVA vybrala za najlepšie a presnosť sme zvýšili. Pre rozhodovací strom sme ale použili 8 atribútov (tie ktoré mali najväčší vplyv podľa ANOVY) a už nám to dalo celkom vysokú presnosť.

3. Optimalizácia - hyperparameter tuning (5b)

Algoritmus používa celkom veľký zoznam hyperparametrov. Podľa dokumentácie je najdôležitejšie nastavenia, počet stromov v lese (n_estimators) a počet prvkov zvažovaných pre rozdelenie v každom uzle listu (max_features). Môžeme teoreticky uvažovať, ktoré by boli doležité pre náš dataset, ale skusíme ich mechanicky prehľadať a poskúšať.

Pokúsime sa upraviť nasledujúcu množinu hyperparametrov:

Pre každý z hore uvedených parametrov sme zvolili množinu hodnôt, v ktorých budeme hľadať tu najlepšu kombináciu.

Pri nastavovaní hyperparametrov sme použili aj krížovú validáciu, ktorá je 5 násobna. Tento randomized search používa defaultne StratifiedKFold. Použili sme aj grid search, ale ten dho bežal, tak sme sa rozhodli nechať randomized. Bunka vyššie nájde najlepšie nastavenie hyperparametrov. Ale počas behu programu sme našli to, že randomized cv dáva vždy iné výsledky, aj keď random seed je rovnaký. Preto sme nižšie použili parametre, ktoré sme našli ako najlepšie.

Znižili sme training accuracy a teda aj overfitting. Test accuracy síce ostal približne 95 percent, ale sme s ním spokojní.

Strom sme tu aj vizualizovali, ale je príliš veľký. Preto prikladáme do odovzdania aj png súbor, ktorý sa dá približiť a teda bude všetko vidno.

4. Vyhodnotenie vplyvu zvolenej stratégie riešenia na klasifikáciu (5b)

Vytvorili sme si zoznam rôznych stratégií na predspracovanie datasetu, ktoré využívame nižšie. Pre riešenie outlierov skúšame dve stratégie a to že ich vymažeme alebo nahradíme mean hodnotou. Pre null hodnoty to je vymazanie, alebo nahradenie hodnotami získanými knn algoritmom. Testujeme aj či je lepšie škálovanie alebo transformácia dát. Počet atribútov, ktoré vstupujú do algoritmu meníme od 2 po 12. A na koniec máme aj výber algoritmu. Buď sa použije random forest alebo linear regression. Samozrejme pre každý tento algoritmus mame nastavené aj iné hyperparametre.

Vyššie môžeme vidieť, že skúšame všetky možné kombinácie predspracovania datasetu a kombinácie algoritmov. Ako náhle sa dataset upraví pomocou pipeline z druhej časti zadania, pomocou randomized search hľadáme najlepšiu kombináciu hyperparametrov pre daný algoritmus. Keď takéto hodnoty hyperparametrov nájdeme vypíšeme všetky nastavenia tohoto behu a takisto aj accuracy pre trénovacie a testovacie dáta. Keďže výpis vyššie je veľký, niektoré zaujímavé zistenia vyberieme a rozpíšeme.